﻿namespace Ulid;

/// <summary>
/// 定义ulid随机数生成器的接口
/// </summary>
public interface IUlidRng
{
    /// <summary>
    /// 创建并返回随机字节数组
    /// </summary>
    /// <param name="dateTime">需要生成随机字节的时间；可以忽略该日期时间，但它能提供上下文信息</param>
    /// <returns>随机数组</returns>
    byte[] GetRandomBytes(DateTimeOffset dateTime);

    /// <summary>
    /// 要填充随机字节的缓冲区
    /// </summary>
    /// <param name="buffer">要填充随机字节的缓冲区</param>
    /// <param name="dateTime">需要生成随机字节的时间；可以忽略该日期时间，但它能提供上下文信息</param>
    /// <exception cref="ArgumentException">缓冲区太小</exception>
    void GetRandomBytes(Span<byte> buffer, DateTimeOffset dateTime);
}
